home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / src / fig10_02.jar / Ch10 / Fig10_02 / Fig10_02.cpp < prev    next >
C/C++ Source or Header  |  1997-11-09  |  3KB  |  85 lines

  1. // Fig. 10.2: fig10_02.cpp
  2. // Driver for shape, point, circle, cylinder hierarchy
  3. #include <iostream.h>
  4. #include <iomanip.h>
  5. #include "shape.h"
  6. #include "point1.h"
  7. #include "circle1.h"
  8. #include "cylindr1.h"
  9.  
  10. void virtualViaPointer( const Shape * );
  11. void virtualViaReference( const Shape & );
  12.  
  13. int main()
  14. {
  15.    cout << setiosflags( ios::fixed | ios::showpoint )
  16.         << setprecision( 2 );
  17.  
  18.    Point point( 7, 11 );                  // create a Point
  19.    Circle circle( 3.5, 22, 8 );           // create a Circle
  20.    Cylinder cylinder( 10, 3.3, 10, 10 );  // create a Cylinder
  21.  
  22.    point.printShapeName();    // static binding
  23.    point.print();             // static binding
  24.    cout << '\n';
  25.  
  26.    circle.printShapeName();   // static binding
  27.    circle.print();            // static binding
  28.    cout << '\n';
  29.  
  30.    cylinder.printShapeName(); // static binding
  31.    cylinder.print();          // static binding
  32.    cout << "\n\n";
  33.  
  34.    Shape *arrayOfShapes[ 3 ];  // array of base-class pointers
  35.  
  36.    // aim arrayOfShapes[0] at derived-class Point object
  37.    arrayOfShapes[ 0 ] = &point;
  38.  
  39.    // aim arrayOfShapes[1] at derived-class Circle object
  40.    arrayOfShapes[ 1 ] = &circle;
  41.  
  42.    // aim arrayOfShapes[2] at derived-class Cylinder object
  43.    arrayOfShapes[ 2 ] = &cylinder;
  44.  
  45.    // Loop through arrayOfShapes and call virtualViaPointer
  46.    // to print the shape name, attributes, area, and volume 
  47.    // of each object using dynamic binding.
  48.    cout << "Virtual function calls made off "
  49.         << "base-class pointers\n";
  50.  
  51.    for ( int i = 0; i < 3; i++ ) 
  52.       virtualViaPointer( arrayOfShapes[ i ] );
  53.  
  54.    // Loop through arrayOfShapes and call virtualViaReference
  55.    // to print the shape name, attributes, area, and volume 
  56.    // of each object using dynamic binding.
  57.    cout << "Virtual function calls made off "
  58.         << "base-class references\n";
  59.  
  60.    for ( int j = 0; j < 3; j++ ) 
  61.       virtualViaReference( *arrayOfShapes[ j ] );
  62.  
  63.    return 0;
  64. }
  65.  
  66. // Make virtual function calls off a base-class pointer
  67. // using dynamic binding.
  68. void virtualViaPointer( const Shape *baseClassPtr )
  69. {
  70.    baseClassPtr->printShapeName();
  71.    baseClassPtr->print();
  72.    cout << "\nArea = " << baseClassPtr->area()
  73.         << "\nVolume = " << baseClassPtr->volume() << "\n\n";
  74. }
  75.  
  76. // Make virtual function calls off a base-class reference
  77. // using dynamic binding.
  78. void virtualViaReference( const Shape &baseClassRef )
  79. {
  80.    baseClassRef.printShapeName();
  81.    baseClassRef.print();
  82.    cout << "\nArea = " << baseClassRef.area()
  83.         << "\nVolume = " << baseClassRef.volume() << "\n\n";
  84. }
  85.